package com.igeek.javase.ch05.JDBC.dao;

import com.igeek.javase.ch05.JDBC.entity.Girl;
import com.igeek.javase.ch05.JDBC.utils.JDBCUtils;
import com.igeek.javase.ch05.JDBC.utils.JDBCUtilsByC3P0;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

/**
 * @author chenmin
 * 2023/7/19 16:29
 * @description TODO
 * JDBC操作步骤
 * 1.加载驱动类
 * 2.获取连接对象
 * 3.编写sql，预编译，获取语句对象
 * 4.处理?占位符
 * 5.执行查询，获取结果集
 * 6.处理结果集
 * 7.关闭资源
 */
public class GirlDao extends BaseDao<Girl>{

    //1.通过ID查询女生信息
//    public Girl selectOneById(int id) throws ClassNotFoundException, SQLException {
//        //1.加载驱动类
//        Class.forName("com.mysql.cj.jdbc.Driver");
//        //2.获取连接对象
//        Connection connection = DriverManager.getConnection(
//                "jdbc:mysql://localhost:3306/testdql?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai" ,
//                "root" , "20020716");
//        //3.编写sql，预编译，获取语句对象
//        String sql = "select * from girl where id = ?";
//        PreparedStatement ppst = connection.prepareStatement(sql);
//        //4.处理?占位符  第一个参数：?的位置  第二个参数：数据
//        ppst.setInt(1 , id);
//        //5.执行查询，获取结果集
//        ResultSet rs = ppst.executeQuery();
//        //6.处理结果集
//        Girl girl = null;
//        while (rs.next()){
//            int ids = rs.getInt("id");
//            String name = rs.getString("name");
//            String sex = rs.getString("sex");
//            Date borndate = rs.getDate("borndate");
//            String phone = rs.getString("phone");
//            int boyfriendId = rs.getInt("boyfriend_id");
//            girl = new Girl(ids , name , sex , borndate , phone , null , boyfriendId);
//        }
//        //7.关闭资源
//        if(rs!=null){
//            rs.close();
//        }
//        if(ppst!=null){
//            ppst.close();
//        }
//        if(connection!=null){
//            connection.close();
//        }
//        return girl;
//    }


    //2.根据名字模糊查询所有女生信息
//    public List<Girl> selectAllByName(String name) throws SQLException {
//        List<Girl> list = new ArrayList<>();
//        //获取连接对象
//        Connection conn = JDBCUtils.getConn();
//        //获取语句对象
//        String sql = "select * from girl where name like concat('%',?,'%')";
//        PreparedStatement ppst = conn.prepareStatement(sql);
//        //3.给?占位符传值
//        ppst.setString(1 , name);
//        //4.执行查询
//        ResultSet rs = ppst.executeQuery();
//        //5.处理结果集
//        while (rs.next()){
//            int ids = rs.getInt("id");
//            String names = rs.getString("name");
//            String sex = rs.getString("sex");
//            Date borndate = rs.getDate("borndate");
//            String phone = rs.getString("phone");
//            int boyfriendId = rs.getInt("boyfriend_id");
//            Girl girl = new Girl(ids , names , sex , borndate , phone , null , boyfriendId);
//            list.add(girl);
//        }
//        //6.关闭资源
//        JDBCUtils.close(conn , ppst , rs);
//        return list;
//    }


    //4.根据女生的姓名更新手机号
    public int updateGirl(String name , String phone) throws SQLException {
        //1.获取连接对象
        Connection conn = JDBCUtilsByC3P0.getConn();
        //2.获取语句对象
        String sql = "update girl set phone = ? where name = ?";
        PreparedStatement ppst = conn.prepareStatement(sql);
        //3.处理?占位符
        ppst.setString(1 , phone);
        ppst.setString(2 , name);
        //4.执行更新
        int i = ppst.executeUpdate();
        //5.关闭资源
        JDBCUtilsByC3P0.close(conn , ppst , null);
        return i;
    }


    //3.添加女生信息
//    public int insertGirl(int id,String name,String sex,String phone,int boyfriendId) throws SQLException {
//        //1.获取连接对象
//        Connection conn = JDBCUtilsByC3P0.getConn();
//        //2.获取语句对象
//        String sql = "insert ignore into girl values(?,?,?,null,?,null,?)";
//        PreparedStatement ppst = conn.prepareStatement(sql);
//        //3.处理?占位符
//        ppst.setInt(1 , id);
//        ppst.setString(2 , name);
//        ppst.setString(3 , sex);
//        ppst.setString(4 , phone);
//        ppst.setInt(5 , boyfriendId);
//        //4.执行更新
//        int i = ppst.executeUpdate();
//        //5.关闭资源
//        JDBCUtilsByC3P0.close(conn , ppst , null);
//        return i;
//    }

    //3.利用dbutils添加女生信息
    public int insertGirl(Girl girl) throws SQLException {
        String sql = "insert into girl values(null , ?, default , ? , ? , null ,?)";
        int i = this.update(JDBCUtilsByC3P0.getConn(), sql, girl.getName(),
                girl.getBorndate(), girl.getPhone(), girl.getBoyfriendId());
        return i;
    }

    //5.通过ID删除女生信息
//    public int deleteGirl(int id) throws SQLException {
//        //1.获取连接对象
//        Connection conn = JDBCUtilsByC3P0.getConn();
//        //2.获取语句对象
//        String sql = "delete from girl where id = ?";
//        PreparedStatement ppst = conn.prepareStatement(sql);
//        //3.处理?占位符
//        ppst.setString(1 , String.valueOf(id));
//        //4.执行删除
//        int i = ppst.executeUpdate();
//        //5.关闭资源
//        JDBCUtilsByC3P0.close(conn , ppst , null);
//        return i;
//    }


    //5.利用dbutils通过ID删除女生信息
    public int deleteGirl(int id) throws SQLException {
        String sql = "delete from girl where id = ?";
        int i = this.update(JDBCUtilsByC3P0.getConn(), sql, id);
        return i;
    }

    //6.根据手机号查询女孩信息
    public List<Girl> selectAllByPhone(String phone) throws SQLException {
        String sql = "select * from girl where phone = ?";
        List<Girl> girls = this.selectAll(JDBCUtilsByC3P0.getConn(), sql, Girl.class, phone);
        return girls;
    }

    //7.查询名字中含有 小 字的女生个数
//    public List<Girl> findGirlByName(String name) throws SQLException {
//        String sql = "select name from girl where name like concat('%',?,'%')";
//        List<Girl> girls = this.selectAll(JDBCUtilsByC3P0.getConn(), sql,Girl.class,name);
//        return girls;
//    }
    public int selectCount(String query) throws SQLException {
        String sql = "select count(*) from girl where name like concat('%', ? ,'%')";
        Long count = (Long)this.selectSingleValue(JDBCUtilsByC3P0.getConn(), sql, query);
        return count.intValue();
    }

}
